/**
 * Copyright 2006 gworks.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 * 	The greatest achievement is selflessness. The greatest worth is self-mastery.
 * 	The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 * 	The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 * 	The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 * 	The greatest goodness is a peaceful mind. The greatest patience is humility.
 * 	The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 * 	The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 */
package org.javaongems.client.winctrls;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.javaongems.client.Gem;

/**
 * <p>Provides a basic list view datasource facility based on array lists.</p>
 * @author Ashin Wimalajeewa (ash)
 */
public class ArrayListViewDataSource implements ListViewDataSource {
	protected List 		colNames;
	protected List 		dataSet;
	protected List 		imgUrls;
	protected boolean	isSingletonImageUrls;
	
	public ArrayListViewDataSource(List cols, List data, List iconDetailImgUrl) {
		colNames = cols;
		dataSet = data;
		imgUrls = iconDetailImgUrl;
		prepareImgUrlForm();
	}
	
	private void prepareImgUrlForm() {
		Object elem = imgUrls.get(0);
		isSingletonImageUrls = !(elem instanceof List);
	}
	
	public int getColCount() {
		return colNames.size();
	}

	public String getColumnDisplayName(int col) {
		return (String) colNames.get(col);
	}

	public Comparable getComparableCellData(int row, int col) {
		List rowSet = (List) dataSet.get(row);
		return (Comparable) rowSet.get(col);
	}

	public int getDataRowCount() {
		return dataSet.size();
	}

	public String getDetailViewImageUrl(int row) {
		List images = imgUrls;
		if (!isSingletonImageUrls) 
			images = (List) imgUrls.get(row);
		String ret = (String) images.get(1);
		return ret;
	}

	public String getDisplayCellData(int row, int col) {
		return (String) getComparableCellData(row, col);
	}

	public String getIconViewImageUrl(int row) {
		List images = imgUrls;
		if (!isSingletonImageUrls) 
			images = (List) imgUrls.get(row);
		String ret = (String) images.get(0);
		return ret;
	}
	
	static public List prepareArrayListDataset(List singleColumnData) {
		ArrayList ret = new ArrayList();
		for (Iterator iter = singleColumnData.iterator(); iter.hasNext();) {
			Object element = (Object) iter.next();
			List singleColRow = new ArrayList();
			singleColRow.add(element);
			ret.add(singleColRow);
		}
		return ret;
	}
	
	static public List prepareApplImageSet(String iconImgName, String detailImgName) {
		String imgCtx = Gem.stone.getApplImageCtx(); 
		ArrayList ret = new ArrayList();
		ret.add(imgCtx + iconImgName);
		ret.add(imgCtx + detailImgName);
		return ret;
	}
	
	static public List prepareSingletonColumns(String columnName) {
		ArrayList ret = new ArrayList();
		ret.add(columnName);
		return ret;
	}
}